//验证令牌  中间件
//导入令牌模块
const jwt=require('jsonwebtoken')
//导入fs模块
const fs=require('fs')
//导入path路径模块
const path=require('path')
//导入响应工具
const xy=require('../utils/xy')

//返回
module.exports=(req,resp,next)=>{
    //规定令牌必须从请求头传过来
    //在请求头获取传输的数据
    if(!req.headers.authorization){
        //没获取到
        xy(resp,406,'缺少身份验证')
        return
    }
    //验证令牌真伪  是否能解开
    //拼接令牌盐的绝对路径
    let configFilePath=path.join(__dirname,'../','config','config.json')
    //读取盐
    let salt=JSON.parse(fs.readFileSync(configFilePath,'utf-8')).tokenSalt
    //判断一下
    jwt.verify(req.headers.authorization,salt,(err,decoded)=>{
        if(err){
            xy(resp,407,'身份验证失败')
            return
        }
        //验证令牌有效期
        //获取一下传过来时间和时限
        let {startTime,expires}=decoded
        if(startTime+expires< +new Date()){
            xy(resp,409,'登陆过期')
            return
        }
        next()
    })
    
}